iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 25
1

前言

有時候需要寄通知信給用戶,例如下完訂單會寄信給用戶訂單的細節;或重設密碼時會寄給用戶重設密碼的連結。

最簡單的純文字mail

  1. 如果使用者要先輸入email地址的話,先在前後端都確認用戶輸入的信箱地址是否符合格式(雙重保障!)

    • 後端:

      request()->validate(['email'=>'required|email']);
      
    • 前端

      <form action="/" method="post">
      	@csrf
      	<input type="email" class="email" name="email" id="email">
      	<input type="submit">
      </form>
      
      @error('email') <!--後端如果驗證非email格式的話會跑這個block-->
          <span class="invalid-feedback" role="alert">
              <strong>{{ $message }}</strong>
          </span>
      @enderror
      
  2. 主要寫信的part在這。
    to後面填要寄去的email地址、subject後面填信件標題。

    Mail::raw('This is example eamil content',function($message){
    			$message->to(request('email'))
    							->subject('Title of Example');
    });
    
    
  3. 設定寄信的方法,可以用smtp真的寄信或log只有紀錄檔。這邊先用log。
    所以去.env編輯一下設置。

    MAIL_MAILER=log
    MAIL_FROM_ADDRESS=laravel@gmail.com//看要寫什麼,可寫可不寫
    

    這樣寄信就可以看到紀錄了,去storage/logs查看。

  4. 最後可以在Controller加個redirect回上一下並留下寄件成功的訊息,使用者比較不會困惑到底有沒有寄成功。

    Mail::raw('This is example eamil content',function($message){
    			$message->to(request('email'))
    							->subject('Title of Example');
    });
    
    return redirect('/')->with('message', 'email sent');
    

    然後在前端加個顯示訊息的block

    @if (session('message'))
        <div class="alert alert-success" role="alert">
            {{ session('message') }}
        </div>
    @endif
    

參考資料

Send Raw Mail


上一篇
Laravel:Route Wildcards
下一篇
Laravel:寄信之二
系列文
網頁後端的30件小事30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言